{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Benchmarking of Graph Network"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "from copy import deepcopy\n",
    "from matplotlib import pyplot as plt\n",
    "from moleculekit.molecule import Molecule\n",
    "from moleculekit.periodictable import periodictable\n",
    "import numpy as np\n",
    "import torch as pt\n",
    "from torch.utils.benchmark import Timer\n",
    "from torchmdnet.models.model import create_model\n",
    "from torchmdnet.optimize import optimize as optimize_model"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Models"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Graph network (default)\n",
    "model_1 = create_model({\n",
    "    'embedding_dimension': 128,\n",
    "    'num_layers': 6,\n",
    "    'num_rbf': 50,\n",
    "    'rbf_type': 'expnorm',\n",
    "    'trainable_rbf': True,\n",
    "    'activation': 'silu',\n",
    "    'neighbor_embedding': True,\n",
    "    'cutoff_lower': 0.0,\n",
    "    'cutoff_upper': 5.0,\n",
    "    'max_z': 100,\n",
    "    'max_num_neighbors': 32,\n",
    "    'model': 'graph-network',\n",
    "    'aggr': 'add',\n",
    "    'derivative': False,\n",
    "    'atom_filter': -1,\n",
    "    'prior_model': None,\n",
    "    'output_model': 'Scalar',\n",
    "    'reduce_op': 'add'\n",
    "})\n",
    "\n",
    "# Graph network (compatible with NNPOps, https://github.com/torchmd/torchmd-net/issues/48),\n",
    "# i.e. rbf_type='gauss', trainable_rbf=False, activation='ssp', and neighbor_embedding=False\n",
    "model_2 = create_model({\n",
    "    'embedding_dimension': 128,\n",
    "    'num_layers': 6,\n",
    "    'num_rbf': 50,\n",
    "    'rbf_type': 'gauss',\n",
    "    'trainable_rbf': False,\n",
    "    'activation': 'ssp',\n",
    "    'neighbor_embedding': False,\n",
    "    'cutoff_lower': 0.0,\n",
    "    'cutoff_upper': 5.0,\n",
    "    'max_z': 100,\n",
    "    'max_num_neighbors': 32,\n",
    "    'model': 'graph-network',\n",
    "    'aggr': 'add',\n",
    "    'derivative': False,\n",
    "    'atom_filter': -1,\n",
    "    'prior_model': None,\n",
    "    'output_model': 'Scalar',\n",
    "    'reduce_op': 'add'\n",
    "})"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Benchmarking function"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "def benchmark(model, pdb_file, device, optimize=True, compute_forces=True, compute_derivatives=False, batch_size=1):\n",
    "\n",
    "    # Optimize the model\n",
    "    model = deepcopy(model).to(device)\n",
    "    if optimize:\n",
    "        assert not compute_derivatives\n",
    "        assert batch_size == 1\n",
    "        model = optimize_model(model)\n",
    "\n",
    "    # Setup the derivative computation\n",
    "    for parameter in model.parameters():\n",
    "        parameter.requires_grad = compute_derivatives\n",
    "\n",
    "    # Get molecular data\n",
    "    molecule = Molecule(pdb_file)\n",
    "    atomic_numbers = pt.tensor([periodictable[symbol].number for symbol in molecule.element], dtype=pt.long, device=device)\n",
    "    positions = pt.tensor(molecule.coords[:,:,0], dtype=pt.float32, device=device).to(device)\n",
    "\n",
    "    # Setup a batch\n",
    "    batch = pt.flatten(pt.tile(pt.arange(batch_size).unsqueeze(1), (1, len(atomic_numbers)))).to(device)\n",
    "    atomic_numbers = pt.tile(atomic_numbers, (batch_size,))\n",
    "    positions = pt.tile(positions, (batch_size, 1)).detach()\n",
    "\n",
    "    # Setup the force computation\n",
    "    assert not (compute_forces and (batch_size > 1))\n",
    "    positions.requires_grad = compute_forces\n",
    "\n",
    "    # Benchmark\n",
    "    stmt = f'''\n",
    "        energy = model(atomic_numbers, positions, batch)\n",
    "        {'energy[0].sum().backward()' if compute_forces or compute_derivatives else ''}\n",
    "        '''\n",
    "    timer = Timer(stmt=stmt, globals=locals())\n",
    "    speed = timer.blocked_autorange(min_run_time=10).median * 1000 # s --> ms\n",
    "\n",
    "    return speed"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Speed for MD"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Method: default\n",
      "  ALA2: 7.852263981476426 ms/it\n",
      "  CLN: 8.225349669810385 ms/it\n",
      "  DHFR: 27.21661669202149 ms/it\n",
      "  FC9: 65.51229511387646 ms/it\n",
      "  STMV: failed\n",
      "Method: compatible\n",
      "  ALA2: 7.383093530079351 ms/it\n",
      "  CLN: 7.977409199811517 ms/it\n",
      "  DHFR: 25.64150399994105 ms/it\n",
      "  FC9: 62.23246781155467 ms/it\n",
      "  STMV: failed\n",
      "Method: optimized\n",
      "  ALA2: 2.734545150306076 ms/it\n",
      "  CLN: 3.929289639927447 ms/it\n",
      "  DHFR: 20.75393449049443 ms/it\n",
      "  FC9: 47.54591805394739 ms/it\n",
      "  STMV: 217.71628607530147 ms/it\n"
     ]
    }
   ],
   "source": [
    "device = pt.device('cuda')\n",
    "systems = [('systems/alanine_dipeptide.pdb', 'ALA2'),\n",
    "           ('systems/chignolin.pdb', 'CLN'),\n",
    "           ('systems/dhfr.pdb', 'DHFR'),\n",
    "           ('systems/factorIX.pdb', 'FC9'),\n",
    "           ('systems/stmv.pdb', 'STMV')]\n",
    "\n",
    "methods = [('default', model_1, False),\n",
    "           ('compatible', model_2, False),\n",
    "           ('optimized', model_2, True)]\n",
    "\n",
    "speed_methods = {}\n",
    "for meth, model, optimize in methods:\n",
    "    speed_methods[meth] = {}\n",
    "    print(f'Method: {meth}')\n",
    "    for pdb_file, name in systems:\n",
    "        try:\n",
    "            speed = benchmark(model, pdb_file, device, optimize=optimize, compute_forces=True, compute_derivatives=False, batch_size=1)\n",
    "            speed_methods[meth][name] = speed\n",
    "            print(f'  {name}: {speed} ms/it')\n",
    "        except Exception as e:\n",
    "            print(f'  {name}: failed')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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W7cuL7zwAgDuzocffrjbvj/88AOHHHIIWVlZfPvtt7z66qvxddnZ2cybNw+AF198sdjXPuyww9iwYUMKzkpERCo7JfRy1rx5cy6//HKaNm1Kly5daNeuHQDPPvssTz75JE2aNKFhw4ZMnDhxt32bNGlCs2bNaNiwIb1796Zt27bxdXfddRe///3vadeuXYlTq3br1o0HHniAZs2aaVCciMh+RtOnyl5TXYtIlGn6VBEREalwSugiIiIRoIQuIiISAUroIiIiEaCELiIiEgFK6CIiIhGghB5BRadRvfPOO5k6dSpQeJKXRHua5lVERCq36D/6dUBWOR8vr3yPlwJFp1G955570hyRiIikmlroKfDMM8+Qk5NDkyZN+NWvfsUXX3xB+/btycnJoX379nz55ZcA9OzZk759+3L22Wdz4oknMnPmTHr37s2pp55Kz54948c79NBD+eMf/0jz5s1p3749a9asAWDYsGG0atWKJk2a0KVLF/Lz84udRrVnz56MHTs2frwHHniA1q1b07p1az777LPd4i9uqlcREanclNDL2eLFi7n33nuZNm0aH374IQ899BD9+vXjyiuvZMGCBVxxxRVcf/318e2///57pk2bxoMPPkinTp248cYbWbx4MQsXLoxP5rJp0yaaN2/O+++/z1lnncXdd98NwCWXXMKcOXP48MMPOfXUU3nyySfj06g+8MADzJ8/n5NOOmm3GGvWrMl7771Hv379uOGGG3Zb36dPHx555BHmzZvH4MGDufbaa1NSVyIiUn6i3+VewaZNm0bXrl2pVasWAEceeSTvvPMO48aNA+BXv/oVt9xyS3z7Tp06YWY0btyYY445hsaNg0cNNmzYkBUrVtC0aVOqVKnC5ZdfDkCPHj245JJLAFi0aBG3334769evZ+PGjZx//vlJxdi9e/f4/zfeeGOhdRs3bkx6qlcREak8lNDLmbvvNn1qUYnrDzroIACqVKkS/7mgvH379lL379mzJxMmTKBJkyaMGDGCGTNmJBVj4uvv7VSvIiJSuajLvZy1b9+e559/nrVr1wKwbt06Tj/9dEaPHg0Es66dccYZZTrmzp074/fAn3vuufj+GzZs4Nhjj2Xbtm08++yz8e33NI3qmDFj4v+fdtpphdbVrFkzqaleRUSkclELvZw1bNiQ2267jbPOOouqVavSrFkzHn74YXr3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RESkUkmmhf5b4DrgeOArgpnWrkthTCIiIlJGyYxyzwWuqIBYREREZC8lM8r9RDObZGZrzOw7M5toZidWRHAiIiKSnGS63J8DngeOBY4DXgBGpTIoERERKZtkErq5+7/dfXv4byTgqQ5MREREkpfMKPfpZtYfGE2QyC8HXjGzIwHcfV0K4xMREZEkJJPQLw///02R5b0JErzup4uIiKRZMqPc61ZEICIiIrL3SryHbmatzOzHCeUrwxHuDxd0t4uIiEjlUNqguH8C/wMwszOBQcAzBNOnDk19aCIiIpKs0rrcqyYMeLscGOruLwIvmtn8lEcmIiIiSSuthV7VzAoSfntgWsK6ZAbTiYiISAUpLTGPAmaaWS6wGZgFYGYnE3S7i4iISCVRYkJ393vN7A2CJ8S95u4FD5OpAvyuIoITERGR5JTade7u/y1m2SepC0dERET2RjKPfhUREZFKTgldREQkApTQRUREIkAJXUREJAKU0EVERCJACV1ERCQClNBFREQiQAldREQkApTQRUREIkAJXUREJAKU0EVERCJACV1ERCQClNBFREQiQAldREQkApTQRUREIkAJXUREJAKU0EVERCJACV1ERCQClNBFREQiQAldREQkApTQRUREIqDSJHQzO9HMnjSzsemORUREJNOkNKGb2VNm9p2ZLSqyvIOZLTWzz8ysP4C7L3f3X6cyHhERkahKdQt9BNAhcYGZVQX+AXQEGgDdzaxBiuMQERGJtJQmdHd/E1hXZHFr4LOwRf4/YDRwUbLHNLM+ZjbXzOauWbOmHKMVERHJXOm4h348sDKhvAo43syOMrMngGZmdmtJO7v7UHdv6e4tjz766FTHKiIikhEOSMNrWjHL3N3XAr+t6GBERESiIB0t9FVAnYRybeDrNMQhIiISGelI6HOAemZW18wOBLoBL6UhDhERkchI9dfWRgHvAKeY2Soz+7W7bwf6Af8BPgaed/fFqYxDREQk6lJ6D93du5ewfDIwOZWvLSIisj+pNE+KKwsz62RmQ/Py8tIdioiISKWQkQnd3Se5e5+srKx0hyIiIlIpZGRCFxERkcKU0EVERCJACV1ERCQClNBFREQiIB2PfpX9THb/V8rlOCsGXVAuxxERiSK10EVERCIgI1voZtYJ6HTyySenOxRJpwHl8LXFAXqWgYhEQ0a20PU9dBERkcIysoWe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",
      "text/plain": [
       "<Figure size 576x432 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.figure(figsize=(8,6))\n",
    "\n",
    "labels = []\n",
    "for i, (meth, speeds) in enumerate(speed_methods.items()):\n",
    "    labels = speeds.keys() if len(speeds.keys()) > len(labels) else labels\n",
    "    x = np.arange(len(speeds)) + 0.25*i - 0.25\n",
    "    plt.bar(x, speeds.values(), width=0.2, log=True, label=meth)\n",
    "\n",
    "plt.axhline(34.56, color='black', linestyle=':', label='10 ns/day')\n",
    "plt.axhline(3.456, color='red', linestyle=':', label='100 ns/day')\n",
    "\n",
    "plt.title('Performance of Graph Network (for MD)')\n",
    "plt.xlabel('System')\n",
    "plt.xticks(np.arange(len(labels)), labels)\n",
    "plt.ylabel('Speed [ms/it]')\n",
    "plt.legend()\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Speed for inference and training"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "System: ALA2\n",
      "  1: 2.5806247303262353 ms/it\n",
      "  2: 2.6035668700933456 ms/it\n",
      "  4: 2.645490919239819 ms/it\n",
      "  8: 2.7056596404872835 ms/it\n",
      "  16: 2.7221463806927204 ms/it\n",
      "  32: 2.7560028596781194 ms/it\n",
      "  64: 4.2596927110571405 ms/it\n",
      "  128: 7.2362863924354315 ms/it\n",
      "  256: 13.14713570754975 ms/it\n",
      "  512: 24.94113480206579 ms/it\n",
      "  1024: 48.6939629772678 ms/it\n",
      "System: CLN\n",
      "  1: 2.7635874692350626 ms/it\n",
      "  2: 2.8175582049880172 ms/it\n",
      "  4: 3.7817843700759113 ms/it\n",
      "  8: 6.205195549409837 ms/it\n",
      "  16: 10.87750195292756 ms/it\n",
      "  32: 20.342897553928196 ms/it\n",
      "  64: 38.8993666972965 ms/it\n",
      "  128: 76.25738007482141 ms/it\n",
      "  256: 152.26690692361444 ms/it\n",
      "  512: 303.5780100617558 ms/it\n",
      "  1024: 608.4158178418875 ms/it\n",
      "System: DHFR\n",
      "  1: 14.775000151712447 ms/it\n",
      "  2: 24.597198888659477 ms/it\n",
      "  4: 44.10969840828329 ms/it\n",
      "  8: 83.3530118688941 ms/it\n",
      "  16: 162.49962442088872 ms/it\n",
      "  32: 322.6637861225754 ms/it\n",
      "  64: 630.0162250408903 ms/it\n",
      "  128: failed\n",
      "  256: failed\n",
      "  512: failed\n",
      "  1024: failed\n",
      "System: FC9\n",
      "  1: 38.061286113224924 ms/it\n",
      "  2: 61.64830503985286 ms/it\n",
      "  4: 108.42715902253985 ms/it\n",
      "  8: 202.93757785111666 ms/it\n",
      "  16: 392.0052860630676 ms/it\n",
      "  32: failed\n",
      "  64: failed\n",
      "  128: failed\n",
      "  256: failed\n",
      "  512: failed\n",
      "  1024: failed\n",
      "System: STMV\n",
      "  1: 428.46657696645707 ms/it\n",
      "  2: 565.2418259996921 ms/it\n",
      "  4: 843.9905470004305 ms/it\n",
      "  8: failed\n",
      "  16: failed\n",
      "  32: failed\n",
      "  64: failed\n",
      "  128: failed\n",
      "  256: failed\n",
      "  512: failed\n",
      "  1024: failed\n"
     ]
    }
   ],
   "source": [
    "device = pt.device('cuda')\n",
    "systems = [('systems/alanine_dipeptide.pdb', 'ALA2'),\n",
    "           ('systems/chignolin.pdb', 'CLN'),\n",
    "           ('systems/dhfr.pdb', 'DHFR'),\n",
    "           ('systems/factorIX.pdb', 'FC9'),\n",
    "           ('systems/stmv.pdb', 'STMV')]\n",
    "\n",
    "speed_inference = {}\n",
    "for pdb_file, name in systems:\n",
    "    speed_inference[name] = {}\n",
    "    print(f'System: {name}')\n",
    "    for batch_size in (1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024):\n",
    "        try:\n",
    "            speed = benchmark(model_1, pdb_file, device, optimize=False, compute_forces=False, compute_derivatives=False, batch_size=batch_size)\n",
    "            speed_inference[name][batch_size] = speed\n",
    "            print(f'  {batch_size}: {speed} ms/it')\n",
    "        except Exception as e:\n",
    "            print(f'  {batch_size}: failed')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "System: ALA2\n",
      "  1: 5.246556689962745 ms/it\n",
      "  2: 6.43798989476636 ms/it\n",
      "  4: 6.762395496480167 ms/it\n",
      "  8: 7.438803277909756 ms/it\n",
      "  16: 7.241337443701923 ms/it\n",
      "  32: 10.024334152694792 ms/it\n",
      "  64: 11.317517946008593 ms/it\n",
      "  128: 21.076745353639126 ms/it\n",
      "  256: 36.19976422050968 ms/it\n",
      "  512: 65.30508247669786 ms/it\n",
      "  1024: 124.31978504173458 ms/it\n",
      "System: CLN\n",
      "  1: 8.889210340566933 ms/it\n",
      "  2: 9.632434090599418 ms/it\n",
      "  4: 9.27276280708611 ms/it\n",
      "  8: 18.307410390116274 ms/it\n",
      "  16: 30.377877689898014 ms/it\n",
      "  32: 53.783495584502816 ms/it\n",
      "  64: 100.32421408686787 ms/it\n",
      "  128: failed\n",
      "  256: failed\n",
      "  512: failed\n",
      "  1024: failed\n",
      "System: DHFR\n",
      "  1: 34.22370969783514 ms/it\n",
      "  2: 58.593000983819366 ms/it\n",
      "  4: 105.5183638818562 ms/it\n",
      "  8: failed\n",
      "  16: failed\n",
      "  32: failed\n",
      "  64: failed\n",
      "  128: failed\n",
      "  256: failed\n",
      "  512: failed\n",
      "  1024: failed\n",
      "System: FC9\n",
      "  1: 75.82235499285161 ms/it\n",
      "  2: 131.27196510322392 ms/it\n",
      "  4: failed\n",
      "  8: failed\n",
      "  16: failed\n",
      "  32: failed\n",
      "  64: failed\n",
      "  128: failed\n",
      "  256: failed\n",
      "  512: failed\n",
      "  1024: failed\n",
      "System: STMV\n",
      "  1: failed\n",
      "  2: failed\n",
      "  4: failed\n",
      "  8: failed\n",
      "  16: failed\n",
      "  32: failed\n",
      "  64: failed\n",
      "  128: failed\n",
      "  256: failed\n",
      "  512: failed\n",
      "  1024: failed\n"
     ]
    }
   ],
   "source": [
    "device = pt.device('cuda')\n",
    "systems = [('systems/alanine_dipeptide.pdb', 'ALA2'),\n",
    "           ('systems/chignolin.pdb', 'CLN'),\n",
    "           ('systems/dhfr.pdb', 'DHFR'),\n",
    "           ('systems/factorIX.pdb', 'FC9'),\n",
    "           ('systems/stmv.pdb', 'STMV')]\n",
    "\n",
    "speed_training = {}\n",
    "for pdb_file, name in systems:\n",
    "    speed_training[name] = {}\n",
    "    print(f'System: {name}')\n",
    "    for batch_size in (1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024):\n",
    "        try:\n",
    "            speed = benchmark(model_1, pdb_file, device, optimize=False, compute_forces=False, compute_derivatives=True, batch_size=batch_size)\n",
    "            speed_training[name][batch_size] = speed\n",
    "            print(f'  {batch_size}: {speed} ms/it')\n",
    "        except Exception as e:\n",
    "            print(f'  {batch_size}: failed')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 576x432 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.figure(figsize=(8,6))\n",
    "\n",
    "for name, speeds in speed_inference.items():\n",
    "    plt.plot(speeds.keys(), speeds.values(), label=name, marker='o')\n",
    "\n",
    "plt.title('Performance of Graph Network (for inference)')\n",
    "plt.xlabel('Batch size')\n",
    "plt.ylabel('Speed [ms/it]')\n",
    "plt.loglog()\n",
    "plt.legend()\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAfQAAAGHCAYAAABGYKDlAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/YYfK9AAAACXBIWXMAAAsTAAALEwEAmpwYAABf9ElEQVR4nO3dd3gU1dvG8e9JIYWQhBJK6L1DAliQKqCAigKKigVQX6w0KSpWRLFhQdSfvSMgHQMqKiIoKh1C7y2FJBCSkF72vH/MBgOkkmxmd/J8ritXktmZ2TvLsM+ec2bOKK01QgghhHBtbmYHEEIIIUTpSUEXQgghLEAKuhBCCGEBUtCFEEIIC5CCLoQQQliAFHQhhBDCAqSgi3KnlKqllFqnlDqnlHrL7DxmU0r5KKXClFKJSqmFZucBUEo1UkpppZSH2VnKmlJqmlJqTgnWv14ptSzP792UUgeVUslKqcGOyFhSSqm7lVK/lPW6xdjXEqXUgLLYlyg9KeiiWJRSx5RSafY3sRil1JdKKb/L3N2DwGnAX2s9qQxjuqrbgFpAda31sPxWUEo1V0rNV0rFKaWS7AXlPaVUvfKNmj+l1Ff2DwBX5lnWTClVrIkulFKjlFJ/OS5hqbwCvJbn9+nA+1prP631stLu3P7avVyafWitv9NaX1/W6xbDa8CMMtqXKCUp6KIkBmmt/YBOwBXAsyXZWBncgIbAHn0ZsxpZscWI8Xoc0Fpn5/egUqoZsAGIAkK11v5AN+Aw0L2Abcx4neKBUhUmRyvp66KUugII0Fr/m2dxQ2B3eTz/5W5TXrTWGwF/pVQXs7MIQGstX/JV5BdwDOiX5/eZwAr7z1cDfwMJwA6gd571/sD4BL8eSAPmAFlAJpAM9AO8gFkYBSvK/rOXffveQATwJHAK+BaYBiy07+scsBNoAUwFYoGTwPV5MtwH7LWvewR4KM9jufufZN82Grgvz+M+wFvAcSAR+AvwKervzuf1a21/LRIwisHN9uUv2l+LLPvr8UA+284Bwor498nvdaoKrADigLP2n+td9G/zKrDR/rctB6rZH2sEaGAkcAKjR+WZQp7/K+Bt+3P3si9rBug86wQAn9tf40iM4u9uf23SgRz7a5AANLZ/d7Nv+xkQe9FrMsH+czDwA8YHikPA6DzrTQMW2ddPAv7PvmyO/XFPYB6wGKiUz9/1PPBZnt8PAzaMYzkZ49gt0fNftP8HufD/Q1ie/29PAuFABuABPGV//nPAHmBInv2MAv7K87sGHgYO2v/tPwDUZazrjnH8nwaOAmPs63vk2f5T4AWz36PkS0tBl6/ifZGnoAP1MYrSS0Bd4AxwA0aPz3X234Ps6/6BURDa2t+UPDHe/F/Os+/pwL9ATSAIo0i+ZH+sN5ANvG5/8/Sxv0mmA/3t+/zG/mbzjH3/o4GjefZ/I9AUUEAvIBXodNH+p9u3vcH+eFX74x/Y/4a69je3a+w5Cv27L3rtPDHe6J8GKgF97G/KLe2PT8NeYAp47U8Bo4r498nvdaoO3Ar4AlUwPgQty7PNHxiFtR1QGaOo5Ra6RvY37k/t++qIUVhaF/D8X2EU6HHYiwWXFvRlwMf256qJ8UHiIftjo8hTZOzLTgCd7T/vx/gw1jrPY6H2n9cC/wO8gRCMDzB987y2WcBg+79T7vEzx/7zSnt29wL+roXAlIL+L1zO8xf02uXzHNsx/q/lfoAchvHhwQ24A0gB6uT3+tn/7VYAgUADe6YBl7HuwxgfHuphfED8jUsL+kRgidnvUfKlpctdlMgypVQCRit1LcbY4j3Aj1rrH7XWNq31r8BmjEKX6yut9W6tdbbWOiuf/d4NTNdax2qt4zBarffmedyG0QLI0Fqn2Zf9qbVepY1u6oUYHwRes+9/PtBIKRUIoLVeqbU+rA1rgV+AHnn2n2V//iyt9Y8YLaWW9uGB+4HxWutIrXWO1vpvrXVGMf/uXFcDfvZ8mVrr3zHeQIcX+mr/pwZGUQdAKTVGKZVgP5/h04JeJ631Ga31Yq11qtb6HEZPSa+L9v2t1nqX1joFeA64XSnlnufxF+372oHRC9GxiKwfAw2UUgPzLlRK1QIGYrSqU7TWscA7wJ2F7Gst0EspVdv++yL7740Bf2CHUqo+xrDDk1rrdK31dozWfN7j5x+t9TL7v1Pu8eMP/IzR4r1Pa51TQIZAjA9f+SrF8xfHbK31ydxttNYLtdZR9v18j9GivrKQ7V/TWidorU8AazA+bJR03duBd7XWEVrrs1x4LkGucxivkzCZ047NCKc0WGv9W94FSqmGwDCl1KA8iz0x3hRynSxiv8EYXdq5jtuX5YrTWqdftE1Mnp/TgNN53pRz3zT9gAR7cXkBo1veDaPFujPP9mf0hePXqfZta2C0ug7nk7k4f3fev++k1tp20d9YN59183MGqJP7i9b6feB9+4lUeU+Ku+B1Ukr5YhTNARitK4AqSin3PK9V3n+b4/a/oUaeZafy/Jz7uhRIa52hlHoJo/cm7weWhvZ9Ryulcpe5UfixsRa4GWMoYR1Gj8K9GL0zf2qtbUqpYCDe/oEl79+Rd0w3v+e42p5nuNa6sHM5zmL0bhTkcp+/OC7YTik1AqM13Mi+KPcYLUhJ/u0KWjf4ohz5/S1VMIZHhMmkhS5K6yRGKy8wz1dlrXXeT/JFnfwWhfGGn6uBfVlxty+QUsoLoyv5TaCW1joQ+BGj+70opzGKR9N8HivO350rCqhvb/HnaoDR3V0cq4GhxVjv4tdpEtASuEobJ9L1tC/P+7fXvyhTFsbfXRpfYoyXD8mz7CRGl32NPK+Xv9a6bQHZwSjoPTCGE9Zi9Ax1w+hlWGtfJwqoppTKW3Qvfm3z2/cvGOcPrLb3HhQkHOODYEEu9/kpxuPnl9s/OH+KMYZd3X4c76J4x3FpRHPhh8b6+azTGqP3RphMCroorTnAIKVUf6WUu1LKWynVu4SXU80DnlVKBSmlamCciFTs64SLUAljTDkOyLa31ot7eY8N+AJ4WykVbP/7uto/JJTk796AMd75hFLKUynVGxiEMTRQHNOAHkqpt5VSdQHsr1PrIrargtFbkaCUqobRS3Gxe5RSbeyt+enAokK6n4vF3tsxDeOkrtxl0RhF9C2llL9Syk0p1VQplTsEEAPUU0pVyrPNQXv+e4B1Wusk+3q3Yi/oWuuTGOdcvGr/N+gAPAB8V4ycbwBzMYp6QS3dH7l0mCLvPi77+fOIAZoUsU5ljAIfB6CUug/j3AdHWwCMV0rVtQ9hPZnPOr2An8ohiyiCFHRRKvY3tFswTviKw2iJTaFkx9bLGOPP4Rhd4Vspo8uf7F2h4zDemM4Cd2GckVxck+2ZNmGcxfw6xpnXxf67tdaZGF3HAzFav/8DRmit9xXzbziA0UVcD2Pc+BzGVQNRGOPeBZmFceLXaYyTDn/OZ51vMU7KOoUxvDCuOJmKYR5G6y6vERgfsPZg/Fss4r+hhN8xTrQ8pZTK20OwFmNI5ESe3xWwLc86wzG6oaOApRjnEfxanJBa65cwTtb7zf6h5+LHtwKJSqmrCtnNZT+/3edAG/t5EcsKyLkH42zzfzA+ALTHOAYc7VOMD2LhGK/5jxgnX+bA+cv6UrRx+ZowWe6lCUKICkYp9QfGWe2fmZ3FmSmlrgce1VoPNjuL2ew9XB9prRvaf18MfG4/mVSYTE6KE0KIQmitf8FopVY4Sikf4FqMv78WxrDN0tzHtda3mhRN5EO63IUQQhREYVxGehajy30vxjkuwglJl7sQQghhAdJCF0IIISxACroQQghhAS59UlyNGjV0o0aNzI4hhBBClIstW7ac1loH5feYSxf0Ro0asXnzZrNjCCGEEOVCKXW8oMeky10IIYSwACnoQgghhAVIQRdCCCEsQAq6EEIIYQFS0IUQQggLkIIuhBBCWIAUdCGEEMICpKALIYQQFiAFXQghhLAAKehCCCGEBUhBdxGJYWEc7NOXva3bcLBPXxLDwsyOJIQQwom49FzuFUViWBjRzz2PTk8HIDsqiujnngcgYNAgM6MJIYRwEtJCdwGx78w6X8xz6fR0Yt+ZZU4gIYQQTkcKugvIjo4u0XIhhBAVjxR0J6ezs1GVPPN9zKNOnXJOI4QQwlnJGLqTi337HXRGJnh6QlbW+eXK25uaj08wL5gQQogCLdsWycxV+4lKSCM40Icp/VsyOLSuQ59TWuhOLDFsBfFffEHVu4YT/MoMPIKDQSk8goOp89J0OSFOCCGc0LJtkUxdspPIhDQ0EJmQxtQlO1m2LdKhzystdCeVvmcP0c89h0/nztR66ilUpUpSwIUQwgXMXLWftKycC5alZeUwc9V+h7bSpYXuhLLPniVizFjcAwKo9+4sVKVKZkcSQghRTFEJaSVaXlakoDsZnZ1N5ITHyT59mnrvv4dHjRpmRxJCCFEC1f3yb4QFB/o49Hmly93JxM6cSeqGDdR59VV82rc3O44QQogSSMnIxqY1CtB5lvt4ujOlf0uHPre00J1I4vLlxH/9DVXvvZfAIYPNjiOEEKKEZvy4l7OpWYzp04y6gT4ooG6gD68Obe/ws9ylhe4k0nbtJvr5F/C94gpqPTHF7DhCCCFK6I/9sczdcIKHejZh0vUtmXS9Y1vkF5MWuhPIPnOGiLFjca9ejbrvzkJ55j+RjBBCCOeUkJrJk4vDaVHLj8eva2FKBmmhm0xnZRE5fgI58fE0nPsdHtWqmR1JCCFECT2/fDdnkjP5fOQVeHu6m5JBCrrJYl5/g9TNmwl+43V82rY1O44QQogSWhkezQ87oph4XQva1Q0wLYd0uZsoYfESzs6ZQ7WRIwm4+Waz4wghhCih2HPpPLtsJx3rBfBo76amZpGCbpK08HBOTZuG79VXU3PKZLPjCCGEKCGtNVMX7yQ1M4e3bg/Bw93ckioF3QTZcXFEjB2HR1AQdd95G+UhIx9CCOFqFmw+yep9sTw5oBXNavqZHUfG0MubzswkYvwEchITaTRvLh5Vq5odSQghRAmdjE9letgeujapzqhrGpkdB5AWerk79eqrpG3dSp0ZL+PdurXZccrMyiMruX7R9XT4ugPXL7qelUdWmh1JCCEcwmbTTF64A6UUM4d1wM1NmR0JkBZ6uTq7cCEJ8+ZT7YH7CbjxRrPjlJmVR1Yy7e9ppOekAxCdEs20v6cBcGMT6/ydQggB8OXfx9hwNJ43bu1Avaq+Zsc5T1ro5SR12zZipr9E5WuuoebEiWbHKVPvbn33fDHPlZ6Tzrtb3zUpkRBCOMah2HO88fM++rWuybAu9cyOcwEp6OUgKyaWyHHj8ahdm7pvv4VyN2fSAUc5lXKqRMuFEMIVZeXYmLhgB76V3HllaHuUco6u9lxOU9CVUoOVUp8qpZYrpa43O09ZsWVmEjl+PDnJydR7/33cAwPNjlTmavrWzHd57cq1yzmJEED4AninHUwLNL6HLzA7kbCI/605THhEIjOGtKdmFW+z41zCoQVdKfWFUipWKbXrouUDlFL7lVKHlFJPAWitl2mtRwOjgDscmas8xbz0MmnbtxP86it4tzRnfl9H0lpT1evSM/W93b0Z32m8CYlEhRa+AMLGQeJJQBvfw8ZJUReltjMikfd+P8gtIcHc0L6O2XHy5egW+lfAgLwLlFLuwAfAQKANMFwp1SbPKs/aH3d5Z+d/T8LChVR/8EH8BwwoegMX9M2eb9h3dh+DmgyiTuU6KBR1Ktdh2jXT5IQ4Uf5WT4estAuXZaUZy4W4TOlZOUxcsJ3qfpWYfnM7s+MUyKFnuWut1ymlGl20+ErgkNb6CIBSaj5wi1JqL/Aa8JPWeqsjc5WH1K1bOTVjBpV79iBo/Diz4zjEjrgdzNoyi34N+jGj+wynG08SFVBiRMmWC1EMb/2yn4OxyXx9/5UE+Drv3TDNGEOvC5zM83uEfdlYoB9wm1Lq4YI2Vko9qJTarJTaHBcX59iklykrJoaIcePxDK5D3ZkzLXcSHEBiRiJT1k6hVuVavNjtRSnmwjlUKeC8jQDnOhtZuI4NR87w2V9HufuqBvRqEWR2nEKZcR16fu/8Wms9G5hd1MZa60+ATwC6dOmiyzhbqdkyMogYOw6dmkr9L7/APcC8O+84itaaZ/96lri0OL4d+C3+lfzNjiQE5GSDZz7XBHv6QN/nyz+PcHnJGdlMXrSD+lV9efoG558IzIwWegRQP8/v9YAoE3KUOa01p6ZPJz08nDqvvYpX8+ZmR3KIb/Z8wx8RfzC5y2Ta1XDe8SRRwfz1NsQfhi7/BwH1AWV8HzQbOtxudjrhgmas3EvE2TTeur0jlb2cfx42MxJuAporpRoDkcCdwF0m5ChzZ+fOJXHxEqo/8jD+11vmyrsL5I6b923Ql7taWeKfTVhBxGb44zVoPwxuegt4y+xEwsWt2RfLvI0neKhXE65oVM3sOMXi6MvW5gH/AC2VUhFKqQe01tnAGGAVsBdYoLXe7cgc5SF10yZiXn0Nv969CRo71uw4DnHBuPk1Mm4unERGMiwZDf7BcMObZqcRFpCQmsmTi8NpWasKE69zncuNHX2W+/AClv8I/OjI5y5PWdHRRIyfQKV69Qie+QbKzWnm6ykzWmueXW+Mm38z4BsCvKx3boBwUT8/BfFHYdRK8Ak0O42wgOeW7yY+JZMvRl2Bl4frnNRsvcpTzmzp6USMGYvOyKDeB+/jXqWK2ZEc4ts93/LHyT+Y1HkS7YPamx1HCMPeMNj2LXR/HBp1MzuNsICwHVGE7YhifN/mtKvrWg0X5x/ld2Jaa069MI303bup978P8Gra1OxIDhEeF847W96hT/0+3N36brPjCGFIioYfxkGdEOg91ew0wgJik9J5bvkuOtYP5JHervd+Li30Ujj77RwSly+nxpgxVOnTx+w4DpE7bl7TtybTu02XcXPhHGw2WP6oMQvc0E/Bo5LZiYSL01rz5OJw0jJzePv2jni4u155dL3EgFJqkFLqk8TERNMypPy7gZjXX8evb19qPPqIaTkcSWvNc+ufIzYtljd7vSnj5sJ5bPwYDv8O/WdAkOuctCSc1/ebTrJmfxxPDWxF0yA/s+NcFpcs6FrrMK31gwEmTdqSFRlJ5OOPU6lhQ4Jff82SJ8EBzNk7hzUn1zCx80QZNxfOI2Y3/PoCtBgIXe43O42wgJPxqby0Yg9dm1RnZNdGZse5bNasRA5kS0vj5Nix6Kws43aofq75Sa4oO+N28vaWt7m2/rXc0/oes+MIYchKh8Wjwdsfbn4PZAhIlJLNppm0cAdKKWYO64Cbm+seU3JSXAlorYl+/gUy9u6j3of/w6tJY7MjOURiRiKT106mpk9NXur2koybC+exejrE7oa7FoKfc8+rLVzDF+uPsvFoPDNv60C9qvlMHexCpKCXQPxXX5MUFkbQhPFU6d3b7DgOobXm+fXPE5say9cDv5Zxc+E8Dv8O/34AV4yGFtaciVGUr4Mx53hj1X76ta7FbZ1d/wY+0uVeTCl//03szJlUue46qj/0kNlxHOa7vd/x+8nfebzz43QI6mB2HCEMqfGw7FGo0RKuf8nsNMICsnJsTFywAz8vD14d2t4SPZHSQi+GzIgIIh+fiFfTJtR59VVL/MPnZ2fcTt7a8ha96/fm3jb3mh1HCIPWEDYOUk7DXQuMu6cJUUrv/36InZGJfHh3J4KqeJkdp0xIC70IttRUYyY4re0nwVU2O5JDJGUmMWXdFIJ8gni528uW/dAiXNC2OcaMcH2fgzrSayRKLzwigffXHGJwSDAD29cxO06ZkRZ6IbTWRD/7LBn791P/k4+p1LCh2ZEcInfcPCYlhq8GfiXj5sJ5nDkMPz0JjXpAV2ve9EiUr/SsHCYu2EGQnxcv3myt2z9LC70Q8V98QdKPPxH0+OP49ehhdhyHmbtvLqtPrGZC5wl0DOpodhwhDDlZsORBcPeAIR+BRed7EOXrzVX7ORSbzBu3dSDA19PsOGVKWugFSP5rPbFvvU2VAQOoPvr/zI7jMLtO7+LNzW/Su15vRrQZYXYcIf6zbiZEbobbvoQA1z8DWZjv3yNn+Hz9Ue65ugE9W1jvskeX/Mjr6KlfM0+cIHLSJLyaNSP4lRmWHU9Oykxi8trJxrh5dxk3F07kxAajoHccDu2Gmp1GWEByRjaTF+6gQTVfnr6htdlxHMIlC7ojp361paQQ8dgYAOp98D5uvq490UBBtNa8sP4FYlJieKPnGzJuLpxHehIsGQ0B9WHgG2anERbx8oo9RCak8dawjvhWsmbntDX/qhJKDAsj9p1ZZEdHo7y80Onp1P/8MyrVr292NIeZu28uv534jcldJhNSM8TsOEL856cnIfEk3PeTMcWrEKX0+74Y5m86ycO9mtKlUTWz4zhMhS/oiWFhRD/3PDo9HcD47uFBTny8yckcZ/fp3TJuLpzT7qWwYy70fAIaXG12GmEBZ1MyeXLxTlrVrsLj1zU3O45DuWSXe1mKfWfW+WJ+XnY2se/MMiWPoyVlJjFp7SQZNxfOJzESwiZA3c7Q6wmz0wiLeHb5LhJSM3nr9o54ebibHcehKnwLPTs6ukTLXZnWmml/TyMmJYYvB3wp4+bCedhssOxh41K1oZ+Cu7UuJxLm+GFHFCvDo5l8fQvaBlv//a7Ct9A96uQ/S1BBy13ZvH3z+PX4r4zvNF7GzYVz+ed9OLoOBr4G1ZuanUZYQExSOs8t20VI/UAe7lUxjqkKX9BrPj4B5e19wTLl7U3NxyeYE8hBcsfNe9XrxYi2Mm4unMipncZtUVvdBKFyDwFRelprnlwcTkZ2Dm/d3hEP94pR6ip8l3vAoEEA589y96hTh5qPTzi/3ArOZZ5j8trJVPepzsvdXsZNVYyDW7iArDRY/H/gWx0GzQY5p0OUgXkbT/LH/jimDWpD0yA/s+OUmwpf0MEo6lYq4HlprXnh7xeITonmqwFfEegdaHYkIf7z6wsQtw/uWQKVq5udRljAiTOpvLxyD9c0rc6Iro3MjlOupKlmcfP3z5dxc+GcDv4GGz+Gqx6BZn3NTiMsIMemmbxwB+5KMXNYR9zcKlaPjxR0C9t9ZjczN82kZ72ejGw70uw4Qvwn5TQsewRqtoF+08xOIyzii7+OsvFYPC/c3Ja6gT5mxyl30uVuUecyzzH5j8lU867GjG4zZNxcOA+t4YexkJ4A9y4FT+8iNxGiKAdizjFz1X6ua1OLWzvVNTuOKVzyXd7RN2dxdbnXm0enRPNmrzdl3Fw4ly1fwf4fjZZ5bWvdj1qYIyvHxsQF2/Hz9uDVoe0r7IRZLlnQHXlzFiv4fv/3/HL8F8Z1Gifj5sK5nD4Eq56GJr2NsXMhysB7vx9iV2QSrwxpRw0/L7PjmMYlC7oo2J4ze3hj0xv0qNuDUW1HmR1HiP/kZMGS/wMPLxj8EbjJ248ovR0nE/hgzSGGhNZlQDvrTQhWEjKGbiG515tX867GjO4ybi6czB+vQtQ2uP1b8K/Yb7yidJZti2Tmqv1EJaTh7qaoXMmdaTe3NTuW6eQd3yJyx82jkqOY2WsmVb2rmh1JiP8c/xv+fBtC74E2N5udRriwZdsimbpkJ5EJaWgg26ZJz7KxZl+s2dFMJwXdIhbsX8Avx39hbOhYQmuGmh1HiP+kJ8KSh6BqIxjwutlphIubuWo/aVk5FyzLzLExc9V+kxI5D+lyt4C9Z/by+qbX6V63O/e1u8/sOEJcaOVkSIqEB34Br4ozDadwjKiEtBItr0ikhe7ikjOTmbR2ElW9q/JK91dk3Fw4l52LYOcC6PUk1OtidhphAXUC85+3ILgCTiRzMXn3d2Faa6b9Yx837ynj5sLJJJyAFROh/lXQY5LZaYRFhNQLvGSZj6c7U/q3LP8wTkYKugtbeGAhq46tYkzoGDrV6mR2HCH+Y8uBpQ+DtsGQj8FdRvdE6W04coafd58itH4gdQO9UUDdQB9eHdqewaEVc3a4vOR/mYvae2Yvr298nW51u3F/u/vNjiPEhda/C8fXw+APoVpjs9MICziTnMG4+dtoWL0y3zxwJVW8Pc2O5HSkhe6CkjOTmbx2MoHegTJuLpxP1DZYMwPaDIaOw81OIyzAZtM8vmAHZ1OzeP+uUCnmBZAWuovRWvPiPy8SmRzJF/2/oJp3NbMjCfGfzFRYPBoq14Sb3oEKOqe2KFsfrTvMugNxvDS4HW2DZcrvgkhBdxErj6zk3a3vEp0SDUD/hv1l3Fw4n1+egTMHYcRy8JUPm6L0Nh2L561fDnBj+zrcc1UDs+M4NZfsq61od1tbeWTl+bun5VobsZaVR1aamEqIi+z/GTZ/AV3HGDdfEaKU4lMyGTdvm3Hi260V9y5qxeWSBb2i3W3t3a3vkp6TfsGy9Jx03t36rkmJhLhIciwsfwxqtYe+z5udRliAzaaZtGA7Z5Iz+eCuTvjLuHmRXLKgVzSnUk6VaLkQ5Upro5hnJsOtnxp3UxOilD798whr9sfxzI2taV+vYjTeSksKugvw9fTNd3ntyrXLOYkQ+dj0GRz8Ba6bDjVbm51GWMCW42d5Y9V+BrStzYiuDc2O4zKkoDu5sMNhpGSl4K7cL1ju7e7N+E7jTUolhF3cfvjlWWjWD6580Ow0wgISUo1x8+BAb16/rYOMm5eAFHQnFh4XzrS/p3Fl7St58ZoXqVO5DgpFncp1mHbNNG5scqPZEUVFlp0Ji/8PKlWGW/4nl6iJUtNaM3nhDmLPpfP+8E4E+Mi4eUnIZWtOKiYlhglrJhDkG8Rbvd4i0DuQW5rdYnYsIf6z5mU4FQ53zoMqtcxOIyzg87+O8tveWJ6/qQ0d6weaHcflSEF3QunZ6UxYM4GUrBQ+vu5jAr0DzY4khCF8AayeDokRgIZGPaDVDWanEhaw7cRZXvtpH9e3qcV93RqZHcclSZe7k8m9g9quM7t4tcerNK/a3OxIQhjCF0DYOEg8CWhjWcRmY7kQpZCYmsWYuduo5e/NzNs6yrj5ZZKC7mS+2v0VK4+sZGzoWPo06GN2HCH+s3o6ZKVduCw7zVguxGXSWjNl0Q5iktJ5/65QAnxl3PxySUF3Iusi1vHOlncY0GgAo9uPNjuOEBdKjCjZciGK4au/j/HLnhieGtiK0AZVzY7j0qSgO4kjCUd4ct2TtKrWiundpkuXk3A+lYPyXx5Qr3xzCMsIj0jglR/30q91TR7oLrfZLS0p6E4gMSORsb+PpZJ7JWb3mY2Ph4/ZkYS4UHIcZGcAF33Q9PSRqV7FZUlMy+KxuVsJ8vPizWEybl4WpKCbLNuWzZS1U4hKiWLWtbNk9jfhfGw5sPh+yMmAvs9BQH1AGd8HzYYOt5udULgYrTVPLQ4nKiGd9+4KJdC3ktmRLEEuWzPZ21ve5p/of5h+zXRCa4aaHUeIS62ZAUfXGZPHhN4NPSaZnUi4uG//Pc5Pu07x1MBWdG4ot9ktK9JCN9HSg0v5ds+33NP6HoY0H2J2HCEutf9n+PMt6DTCKOZClNKuyEReXrGXa1sG8WCPJmbHsRQp6CbZHrudl/59iavrXM2kLtLiEU4o/igsfRDqdISBM81OIyzgXLoxbl6tciXeuj0ENzcZNy9LLlnQlVKDlFKfJCYmmh3lspxKOcWENROoXbk2b/Z6Ew83GfkQTiYrHRaMMH6+/Rvw9DY3j3B5WmueWrKTiLNpvHdXKNUqy7h5WXPJgq61DtNaPxgQ4Hr3yE3LTmPc7+NIz0nnvT7vEeDlen+DqAB+mmLM0z7kE6jayOw0wgK+23CCleHRTLyuBVc0knFzR5CmYTnSWvPC+hfYF7+P9/q8R9PApmZHEuJS2+bA1m+Mk99aDjA7jbCA3VGJTF+xh54tgnikl7zvOYpLttBd1ee7PuenYz8xvtN4etXvZXYcIS4VHQ4rJ0HjXnDtM2anERaQnJHNmLnbqOrrydu3d5RxcweSFno5WXNiDbO3zuaGxjdwf7v7zY4jxKXSEoxxc59qcOvn4OZudiLh4rTWPL1kJ8fPpDBv9NXU8PMyO5KlSUEvB4fOHuKpP5+iTfU2vHjNizIjknA+WsOyR407qY36EfwKmOZViBKYv+kkP+yIYtJ1LbiqSXWz41ieFHQHS0hPYOzvY/H19GXWtbPw9pCzhYUTWv8u7F8JA16DBleZnUZYwN7oJKb9sJvuzWrw6LXNzI5TIUhBd6AsWxaT104mJjWGLwd8KdO6Cud09E9Y/SK0HQJXPWx2GmEBKRnZPDZ3K/4+nrxzRwjuMm5eLqSgO9Cbm95kw6kNvNztZToGdTQ7jhCXSoqGRfdDtaZw83sgw0GilLTWPLdsF8dOpzDn/64iqIqMm5cXKegOsujAIubum8vINiO5pdktZscR4lI5WbDoPshMhpE/gFcVsxMJC1i4JYIl2yKZ0K851zStYXacCkUKugNsidnCjA0z6Bbcjcc7P252HCHy99s0OPEPDP0MarY2O42wgAMx53h++S6uaVqdsX2amx2nwpHr0MtYVHIUE/+YSD2/erzR6w3c5dIf4Yz2LId/3ocrRkOHYWanERaQmpnNo99txc/Lg1l3yri5GaSFXoZSs1IZv2Y8WTlZzO4zG/9K/mZHEuJSpw/BssegbhfoP8PsNMIinl++m8NxyXx7/1XUrCJX85hBCnoZ0Vrz7PpnOXD2AO/3eZ/GAY3NjiTEpTJTYMG94O4Jw74CDzlhSZTe4i0RLNoSwbg+zejeXMbNzSIFvYx8HP4xvx7/lcldJtOjXg+z4whxKa1hxeMQuxfuWQyB9c1OJCzgUOw5nl22i6saV2N8vxZmx6nQZAy9DKw+vpoPtn/AoCaDGNFmhNlxhMjf5i8g/HvoPRWa9TU7jbCAtMwcHvtuG76V3Jk9PFTGzU0mLfRSOnD2AFP/mkr7Gu154ZoXZFpX4Zwit8DPT0Gz66DnFLPTCIuY9sNu9sec4+v7r6SWv4ybm01a6KVwNv0s434fRxXPKsy6dhZe7jIeKZxQajwsGAl+tWDoJ+Am/+1F6S3bFsn3m0/y2LVN6dVC5v53BtJCv0xZtiwm/jGRuNQ4vh74NTV9a5odSYhL2Wyw5EFIjoH7fwbfamYnEhZwOC6Zp5fu5MpG1Xhcxs2dhhT0y/T6xtfZHLOZV3u8Srsa7cyOI0T+/nwTDv0KN74NdTubnUZYQHpWDo99txUvDzfeHR6Ch7v0+DgLl/yXUEoNUkp9kpiYaMrzf7/ve77f/z33tbuPm5rcZEoGIYp0aDWseQU63Ald7jc7jbCI6Sv2sO/UOd6+I4Q6AT5mxxF5uGRB11qHaa0fDAgIKPfn3nRqE69tfI0edXswPnR8uT+/EMWScBIW/58xpetN78hNV0SZ+GFHFHM3nOChXk24tqUMMzoblyzoZok4F8HEPyZS378+r/d8XaZ1Fc4pOxMWjjJuvnL7t1DJ1+xEwgKOnk5h6uJwOjesyuTrW5odR+RDxtCLKTUrlXFrxpGjc3ivz3tUqSR3phJO6pdnIHKzUcxrNDM7jbCA3HFzTw833hseiqeMmzslKejFYNM2nv7raQ4nHObDfh/S0L+h2ZGEyF/4Qtj4CXQdA21uNjuNsIgZK/eyJzqJz0d2IThQxs2dlXzMKoYPd3zI6hOrmdxlMtcEX2N2HCHyF7sXwsZBg67Qb5rZaYRFrAyP5tt/jzO6R2P6tq5ldhxRCGmhF2HVsVV8tOMjBjcbzD2t7zE7jhD5yzgH398Llfzgti+Nm68IcZmWbYtk5qr9RCWkAdCgmg9PDGhlcipRlAILulJqaDG2T9da/1iGeZzKvvh9PLf+OToGdeS5q5+TaV2Fc9IafhgL8YdhxA/gX8fsRMKFLdsWydQlO0nLyjm/LCYpg5Xh0QwOrWtiMlGUwlronwLLgcKqWE/AkgX9TNoZxv0+Dv9K/sy6dhaV3CuZHUmI/G34CHYvhX4vQmO5058onZmr9l9QzAEysm3MXLVfCrqTK6yg/6S1LnQ2CqXUnDLO4xSycoxpXc+mn+XrgV9Tw0fu7yuc1IkN8Muz0PJG6CbzIojSy+1mL+5y4TwKPClOa30PgFLqkjuO5C7LXcdKtNbM2DCDrbFbeanbS7Sp3sbsSELkLzkOFo6EgPow+H8yeYwoEzX88r/JlJzd7vyKc1LcP0CnYixzWSuPrOTdre9yKuUUVSpVISkzidHtRzOg8QCzowmRP1sOLL4f0s7C//0GPoFmJxIWEJuUTkZ2NgrQeZb7eLozpb9MJuPsCjsprjZQF/BRSoXy31i6P2CZqadWHlnJtL+nkZ6TDkBSZhJuyo3GAY1NTiZEIdbMgKPr4Jb/Qe32ZqcRFpCelcOD324h2waT+7dk7oYTRCWkERzow5T+LWX83AUU1kLvD4wC6gFv51l+DnjagZnK1btb3z1fzHPZtI33tr3HoKaDTEolRCH2/wx/vgWdRkDo3WanERagtebZZbvYfjKBD+/uxMD2dXjsWpll0NUUWNC11l8DXyulbtVaLy7HTOXqVMqpEi0XwlTxR2Hpg1CnIwycaXYaYRFfrj/Goi0RjOvbnIHt5bJHV1VYl/s9Wus5QCOl1MSLH9dav53PZi6nduXaRKdE57tcCKeSlQ4LRhg/3/4NeHqbm0dYwl8HTzPjx730b1uLCX2bmx1HlEJhU7/mjpP7AVXy+bKE8Z3G4+1+4Rujt7s34zvJJUDCyfw0BU6Fw5BPoGojs9MICzh+JoXH5m6lWZAfb90egpubXCnhygobQz+nlKqutX6x3NKY4MYmNwKcP8u9duXajO80/vxyIZzCtjmw9RvoMQlaytUXovSSM7IZ/c1mlIJPR3TBz0tmAnd1hf0LNgQWKqU8gdXAT8BGrbUuZBuXdGOTG6WAC+cVHQ4rJ0HjXnDtM2anERZgs2ke/347h+NS+Ob+K2lQ3TIXLlVohU0s85rWug9wA7ADuB/YqpSaq5QaoZSS2+4I4WhpCca4uU81uPVzcHM3O5GwgFm/HeDXPTE8e2NrujWTmTCtosg+Fq31OWCp/QulVBtgIPANxqVtQghH0BqWPQqJJ2HUj+AXZHYiYQErw6OZ/fshbu9Sj1HXNDI7jihDRd4PXSnVTSlV2f7zPcD/AYu01lLMhXCk9e/C/pVw/cvQ4Cqz0wgL2BOVxOSFO+jUIJCXBreTO0haTHHOgvgQ6KiU6gg8AXyO0Trv5chgQlQ44Qtg9XRIjIDKNSAlDtoOgaseNjuZsIAzyRmM/mYzAT6efHRPZ7w8ZPjGaopsoQPZ9hPhbgHe1Vq/i4UuWxPCKYQvgLBxRvc62ijmKGjaR266IkotK8fGo99tJS45g4/v7UxNf5nDwIqKU9DPKaWmAvcAK5VS7oCnY2MJUcGsng5ZF9+eUsPaN0yJI6xletgeNhyN541bO9CxfqDZcYSDFKeg3wFkAA9orU9h3LBF5pwUoiwlRpRsuRDFNHfDCb799zgP9WwiN1ixuCILutb6lH2a1x1KqWpAMrDC4cmEqEgC6pVsuRDFsPFoPM8v30WvFkE8MaCV2XGEgxXnLPeHlFIxQDiwxf612dHBisg0SCn1SWJiopkxhCg7LfK5aMTTB/o+X/5ZhCVEJqTxyJwt1K/my+zhobjLtK6WV5wu98lAW611I611Y/tXE0cHK4zWOkxr/WBAQICZMYQoG8fWG9O6Vm9ub5ErCKgPg2ZDh9vNTidcUFpmDg9+s5nMbBufjuhCgI+c9lQRFOeytcNAqqODCFEhnT4I8++CwIbwwC/gW83sRMLFaa2ZsmgHe6KT+HxkF5rV9DM7kignxSnoU4G/lVIbME6OA0BrPc5hqYSoCJLjYM6t4O4J9yySYi7KxIdrD7MiPJonBrSkTyuZobsiKU5B/xj4HdgJ2BwbR4gKIjMV5t0BybEwaqXcDlWUidV7Y5i5aj+DOgbzSK+mZscR5aw4BT1baz3R4UmEqChsObBkNERuhTu/g3qdzU4kLOBQ7DnGz99O22B/3ri1g0zrWgEV56S4NUqpB5VSdZRS1XK/HJ5MCKta9QzsWwEDXoNWctteUXqJqVmM/mYL3p5ufHJvF3wqybSuFVFxWuh32b9PzbNMA6ae6S6ES/r3Q9jwIVz9KFwtc7SL0suxacbO30bE2VTmjr6a4EAfsyMJkxTn9qmNyyOIEJa3dwX8PBVa3WTcQU2IMvD6z/tYdyCOV4e254pG0nlakRXY5a6U6lTUxsVZRwgBRGyBxf8HdTvD0E/BTbpERekt2RrBJ+uOMKJrQ4Zf2cDsOMJkhbXQv1RK9QYKO7PicyC0LAMJYTnxR2Hu7VClFgyfD5V8zU4kLGDHyQSeWrKTq5tU47mb2pgdRziBwgp6AMY0r4UV9LiyjSOExaTGw3fDQOfA3YvAL8jsRMICYpPSefDbzQT5efG/uzvj6V6c85uF1RVY0LXWjcoxhxDWk50B398DCcdhxHKo0dzsRMICMrJzeGjOFpLSsln8yDVUq1zJ7EjCSRTnLHchREnZbLDsUTi+Hm79HBpeY3YiYQFaa55duottJxL48O5OtAn2NzuScCLSTyOEI/z+EuxaBH1fgPa3mZ1GWMSX64+xcEsE4/o0Y2D7OmbHEU5GCroQZW3LV/DX29B5FHR/3Ow0wiL+OniaGT/u5bo2tZjQr4XZcYQTKrDLvahL0rTWW8s+jhAu7uBvsGIiNOsHN7wFMv2mKAPHz6Tw2NytNA2qzDt3hOAm9zYX+ShsDP0t+3dvoAuwA+OM9w7ABqC7Y6MJ4WKiw2HhSKjVBoZ9Be5yioooveSMbEZ/sxml4NMRXfDzkuNK5K/ALnet9bVa62uB40AnrXUXrXVnjOvOD5VXQCFcQmKEca25dwDctRC8qpidSFiAzaZ5/PvtHI5L4YO7OtGwemWzIwknVpwx9FZa6525v2itdwEhDkskhKtJT4TvbofMFLh7IfjLyUqibMxafZBf98TwzA2t6dashtlxhJMrTt/NXqXUZ8AcjJuy3APsdWgqIVxFThYsGAmn9xsTx9Rqa3YiYRE/7Yxm9uqDDOtcj/u6NTI7jnABxSno9wGPAOPtv68DPnRYIiFchdawYgIcWQO3fABNrzU7kbCIPVFJTFywg9AGgbw8pJ3c21wUS3HutpaulPoI+FFrvb8cMgnhGta9CdvmQM8nIPQes9MIi4hPyWT0N5vx9/Hg43s64+UhN/IRxVPkGLpS6mZgO/Cz/fcQpdQPDs4lhHPb8T2seRk63AnXPm12GmERWTk2Hv1uC3HJGXxybxdq+nubHUm4kOKcFPcCcCWQAKC13g40clgiIZzd0T9h+WPQqAfc/J5cay7KzEsr9vDvkXheG9qejvUDzY4jXExxCnq21jrR4UmEcAVx++H7u6FaE7jjW/CQG2OIsjFv4wm++ec4o3s0ZminembHES6oOCfF7VJK3QW4K6WaA+OAvx0bSwgndC4G5twG7l7G5Wk+Vc1OJCxi07F4nl++i54tgnhqYGuz4wgXVZwW+ligLZABzAUSgQkOzCSE88lMMSaOST0Nd30PVRuanUhYRGRCGo/M2UK9qr68d2co7jKtq7hMxTnLPRV4Rin1itY6pRwyCeFcbDmw6AE4FQ53zoW6hd7mQIhiS8vM4aFvN5OeZWP+g50J8PU0O5JwYUUWdKXUNcBngB/QQCnVEXhIa/2oo8MJYTqt4acn4cBPcMOb0HKg2YmEi1u2LZKZq/YTlZCGt6c7aVk5fD6yC81qynTBonSK0+X+DtAfOAOgtd4B9HRkKCGcxj8fwKZPoesYuHK02WmEi1u2LZKpS3YSmZCGBtKycvBwU5xLzzY7mrCAYt0PXWt98qJFOQ7IIoRz2bMcfnkW2twC171kdhphATNX7Sct68K3z2ybZuYqmbNLlF5xznI/ae9210qpShhnuctc7sLaTm6EJQ9CvStgyMfgVqzPvkIUKiohrUTLhSiJ4rxLPQw8BtQFIjHutPaYAzMJYa4zh2HenVClDgyfB54+ZicSFhEcmP/Mb8GBcoyJ0ivOWe6ngbvLIYsQ5ks5A98NM06Gu2cxVJZbVoqyc1XjaizZFnXBMh9Pd6b0b2lSImElxZnLvYlSKkwpFaeUilVKLVdKNSmPcEKUq6x0mH8XJEbA8PlQvanZiYSFHIg5x4qdp2hduwp1A71RQN1AH14d2p7BoXXNjicsoDhj6HOBD4Ah9t/vBOYBVzkqlBDlzmaDpQ/ByX9h2FfQQA5vUXYysnMYN28bVbw8+OaBqwiq4mV2JGFBxRlDV1rrb7XW2favOYB2dLBCAyk1SCn1SWKiTDEvysjqabBnGVw3HdoOKWptIUpk5s/72XfqHG/c1kGKuXCY4hT0NUqpp5RSjZRSDZVSTwArlVLVlFLVHB0wP1rrMK31gwEBAWY8vbCaTZ/D+nehywNwzTiz0wiL+evgaT776yj3Xt2Qvq1rmR1HWFhxutzvsH9/6KLl92O01GU8XbiuA6vgx8nQvD8MfENuhSrK1NmUTCYt3E7ToMo8fYPcdEU4VnHOcm9cHkGEKHdR22DhfVC7Pdz2BbgX5/OtEMWjteapJeHEp2Ty+cgr8KnkbnYkYXEFdrkrpa5QStXO8/sI+xnus83qaheizCScgLl3gG81uGsBePmZnUhYzILNJ1m1O4bJ17ekXV0ZHhSOV1iT5GOgH4BSqifwGsatVEOAT4DbHB1OiDIVvgBWTzcuS3NzB+UJD62BKrWL3laIEjh6OoUXw/ZwTdPqjO4ho5KifBR2Upy71jre/vMdwCda68Va6+eAZo6PJkQZCl8AYeMg8SSgwZYN2ODUTrOTCYvJyrEx4fvteLq78dbtHXGT+5uLclJoQVdK5bbg+wK/53lMBhuFa1k9HbIumi87J8NYLkQZmr36IDtOJvDKkPbUCZApXUX5KawwzwPWKqVOA2nAnwBKqWaAXAAuXEtiRMmWC3EZNh2L54M1h7itcz1u7FDH7DiigimwoGutZyilVgN1gF+01rmTybhhjKUL4Tr8gyEp8tLlAfXKP4uwpKT0LCbM3069qr5Mu7mt2XFEBVRo17nW+t98lh1wXBwhHKRak0sLuqcP9H3enDzCcl5YvptTSekseKgrfl4yKinKn9zkWVjf0XVw7E9ofj0E1AeU8X3QbOhwu9nphAUs3x7J0m2RjO3TjM4Nq5odR1RQ8jFSWFtmKvwwDqo2hmFfQyVfsxMJi4k4m8qzy3bRqUEgY66VC4CEeaSgC2v741U4exRGhkkxF2Uux6aZuGAHWsOsO0LxcJdOT2EeKejCuiK3wj/vQ+dR0Lin2WmEBX209jAbj8bz1rCONKguHxiFueTjpLCm7ExYPgb8ahm3RBWijIVHJPDOrwe4sUMdhnaqa3YcIaSFLixq/bsQuxvunAfeMo+2KFupmdlMmL+doCpevDK4PUru0iecgBR0YT2x+2DdG9B2KLS6wew0woJeWrGXo2dS+O7/riLA19PsOEIA0uUurMaWAz+MhUqVjfubC1HGVu0+xbyNJ3iwZxOuaVrD7DhCnCctdGEtmz6DiI0w5BPwCzI7jbCY2KR0nlocTru6/ky6rqXZcYS4gLTQhXWcPQ6/vQjNrpMJY0SZs9k0kxbuIC0rh1l3hFLJQ94+hXORI1JYg9awYgIoBTe9Y3wXogx99fcx/jx4mmdvbEOzmn5mxxHiEtLlLqxhxzw4/Dvc8CYE1jc7jbCYfaeSeO3nffRrXZO7r2pgdhwh8iUtdOH6zsXAz1Oh/tXQ5QGz0wiLSc/KYfy87fh7e/DarR3kEjXhtKSFLlzfT1MgKw1ueR/c5DOqKFtv/Lyf/THn+PK+K6jh52V2HCEKJO9+wrXtDYM9y6H3k1CjudlphMWsOxDHF+uPMrJrQ65tWdPsOEIUSgq6cF1pZ2HlJKjdHq4ZZ3YaYTHxKZlMWriD5jX9mHpDa7PjCFEk6XIXruuX5yDlNNy1ANxlti5RdrTWPLk4nMTULL6+70q8Pd3NjiREkaSFLlzTkT9g27dwzVgIDjE7jbCY+ZtO8uueGJ4Y0JI2wf5mxxGiWKSgC9eTmQI/jINqTaH3U2anERZzJC6Z6WF76N6sBvd3a2x2HCGKTbrchev5fQYkHIdRP4Knj9lphIVk5diY8P12vDzdeHNYR9zc5BI14TqkoAvXErEZ/v2fcb15o25mpxEWM+u3A4RHJPLRPZ2oHeBtdhwhSkS63IXryM6E5WPAPxj6TTM7jbCYDUfO8L8/DnN7l3oMaFfH7DhClJi00IXr+OttiNtrnNXuLScqibKTmJbFxAU7aFjNlxcGtTU7jhCXRQq6cA0xe2Ddm9B+GLTob3YaYTHPL9/FqaR0Fj3clcpe8rYoXJN0uQvnZ8uBH8YYrfIBr5mdRljMsm2RLN8exYS+zQltUNXsOEJcNvkoKpzfho8gcgvc+jlUrmF2GmEhJ+NTeW7ZLro0rMqj1zYzO44QpSItdOHc4o/C6pegxQBod6vZaYSF5Ng0ExdsB+CdO0Jwl0vUhIuTFrpwXlpD2Hhw84Ab3wa5baUoQx/+cYhNx87yzh0dqV/N1+w4QpSaFHThvLbNgaNr4aZ3IKCu2WmEhWw/mcCs3w5yc8dgBofIsSWsQbrchXNKioZVz0DD7tBplNlphIWkZGQzYf42avl789Lgdijp+REWIS104Xy0hh8nQ04G3Dwb3ORzpyg7L63Yw/H4VOaNvpoAH7lLn7AOeacUzmfPcti3AnpPhepNzU4jLOTnXaeYv+kkj/RqytVNqpsdR4gyJQVdOJfUeKN1XqcjdB1jdhphITFJ6Ty1JJz2dQOY0K+F2XGEKHPS5S6cyy/PQtpZuHcpuMvhKcqGzaaZvHAHGVk2Zt0ZQiUPacsI65GjWjiPQ6th+3fQbQLUbm92GmEhX6w/yp8HT/PcTW1oGuRndhwhHEIKunAOGckQNgFqtICeU8xOIyxkb3QSb/y8n+va1GL4lfXNjiOEw0ifpnAOv78EiSfh/p/BU+5DLcpGelYO4+dvI8DXk9dv7SCXqAlLk4IuzHdiA2z4GK4cDQ2uNjuNsJDXftrHgZhkvr7/SqpVrmR2HCEcSgq6MFd2BvwwFgLqQd/nzU4jLGDZtkhmrtpPZEIaAD2b16BXiyCTUwnheDKGLsy17k04vR9umgVeVcxOI1zcsm2RTF2y83wxB9h4LJ5l2yJNTCVE+ZCCLsxzahf89TZ0HA7N+5mdRljAzFX7ScvKuWBZepaNmav2m5RIiPIjXe7CHDnZ8MMY8KkK/V8xO41wYelZOWw8Gs+6A3EXtMzziipguRBWIgVdmOPf/0HUNhj2FfhWMzuNcCFaaw7EJLPuQBzrDsax8Wg8Gdk2Knm44eXhRka27ZJtggN9TEgqRPmSgi7K35nDsGYGtLwR2gw2O41wAfEpmfx5MI4/D57mz4NxxCRlANC8ph93X9WQni1qcFXj6qzafYqpS3Ze0O3u4+nOlP4tzYouRLmRgi7Kl9YQNh7cveDGt0CuCxb5yMy2sfXEWf48GMe6A6fZFZWI1hDo60m3ZjXo1TyI7s1rXNLyHhxq3Nt85qr9RCWkERzow5T+Lc8vF64lKyuLiIgI0tPTzY5S7ry9valXrx6ensW/I6AUdFG+tn4Nx/6EQbPBv47ZaYST0Fpz7EyqvYDH8c/hM6Rk5uDupujUIJCJ/VrQo0UQ7esG4O5W+IfAwaF1pYBbREREBFWqVKFRo0YValIgrTVnzpwhIiKCxo0bF3s7Keii/CRFwS/PQaMe0GmE2WmEyZLSs/j70BnWHYzjz4NxnIw3TlxrUM2XIZ3q0qN5ENc0rU4Vb7lneUWVnp5e4Yo5gFKK6tWrExcXV6LtpKCL8qE1rJgIOVlw82zpaq+Acmya8IgE1h0wxsG3nUwgx6bx8/Kga9PqPNizKT2b16Bh9cpmRxVOpKIV81yX83dLQRflY/cSOPATXD8DqjUxO40oJ1EJaaw7YJzM9teh0ySmZaEUdKgbwKO9m9KjeRChDQLxdJcpMYTzWrp0KUOHDmXv3r20atWKY8eOcdNNN7Fr165817/llluIjY3ln3/+Ob/s7bff5rPPPsPDw4OgoCC++OILGjZsWKY5naagK6WaAM8AAVrr28zOI8pQyhn48QkI7gRXP2J2GuFAqZnZbDgSzzr7WPjhuBQAavt7079tLXo0D6Jbsxoyr7pwKfPmzaN79+7Mnz+fadOmFbpuQkICW7duxc/Pj6NHj54fAw8NDWXz5s34+vry4Ycf8sQTT/D999+XaU6HFnSl1BfATUCs1rpdnuUDgHcBd+AzrfVrWusjwANKqUWOzCRMsGoqpCfALT+Am7vZaUQp5M6TnnsG+eTrWtCiThX+PHiadQfi2HzsLJk5Nrw93biqcXWGX9mAXi2CaFbTr8J2nYryc/HxWRZXOCQnJ7N+/XrWrFnDzTffXGRBX7x4MYMGDaJWrVrMnz+fqVOnAnDttdeeX+fqq69mzpw5pcqVH0e30L8C3ge+yV2glHIHPgCuAyKATUqpH7TWexycRZjh4K8Q/j30ehJqtTU7jSiF3HnSc6/xjkxI4/GFO84/3qp2FUZ1a0TP5kF0aVQVb0/58CbKT37H59QlOwFKVdSXLVvGgAEDaNGiBdWqVWPr1q1Uq1bwZFjz5s3jhRdeoFatWtx2223nC3pen3/+OQMHDrzsTAVxaEHXWq9TSjW6aPGVwCF7ixyl1HzgFkAKutVknIOwCRDUCnpMMjuNKKX85kkHqOrryaoJPanpL/exF47zYthu9kQlFfj4thMJZOZcOEtgWlYOTywKZ97GE/lu0ybYnxcGFd7QmDdvHhMmTADgzjvvZN68eTz22GP5rhsTE8OhQ4fo3r07Sik8PDzYtWsX7dqd76Bmzpw5bN68mbVr1xb6vJfDjDH0usDJPL9HAFcppaoDM4BQpdRUrfWr+W2slHoQeBCgQYMGjs7qPMIXwOrpkBjx361GO9xudqrC/fYiJEXCA7+Ch5fZaUQpZOfYCpwnPSE1S4q5MN3Fxbyo5cVx5swZfv/9d3bt2oVSipycHJRSPProo/mu//3333P27Nnz4+ZJSUnMnz+fl19+GYDffvuNGTNmsHbtWry8yv490YyCnt9AmtZanwEeLmpjrfUnwCcAXbp00WWczTmFL4CwcZBlf0NNPGn8Ds5b1I//DZs+hasfhfpXmJ1GlEJkQhrj5m0r8HGZJ12Uh6Ja0t1e+z3fD511A334/qGul/WcixYtYsSIEXz88cfnl/Xq1YuIiIh81583bx4///wzXbsaz3f06FGuu+46Xn75ZbZt28ZDDz3Ezz//TM2aNS8rT1HMuFYkAqif5/d6QJQJOVyDzQa/Pv9fMc+VlQa/PAsJJyHLyaZFzEqHH8ZCYAPo86zZaUQprNp9ihve/ZP9p85xb9eG+Fw0Li7zpAtnMaV/yzI/PufNm8eQIUMuWHbrrbfyyiuvsH//furVq3f+a+bMmZw4cYKrr776/LqNGzfG39+fDRs2MGXKFJKTkxk2bBghISHcfPPNl52rIEprxzZy7WPoK3LPcldKeQAHgL5AJLAJuEtrvbuk++7SpYvevHlzGaY1WXoSxO6BUzshZhfE7IaYPZCVUvS2lapA5RrgVxMqBxk/Vw7K5+cg45aljjzb/LcXjfuc37sUmvZx3PMIh8nIzuHVH/fx1d/HaF83gPeGh9KoRmWHnEUsREH27t1L69ati72+1Y7P/P5+pdQWrXWX/NZ39GVr84DeQA2lVATwgtb6c6XUGGAVxmVrX1xOMXdpNhskHINTu/4r3Kd2QsLx/9bxDoBa7SH0Hti5ANLOXrof3xrGWHpKHKSctn+Pg/ijcHIjpJ4Gnc/4kXIzti2q8Od+QKhUjJm78o7xo6FBNynmLupIXDJj521jd1QSD3RvzJMDWlHJw+jMk3nShTOr6Meno89yH17A8h+BHx353E4j45zRyo7ZaS/cu4xWeGay8bhyg2pNoW4n6HSvUcRrtwP/uv9Nj1qvy4Vj6ACePjDg1cLH0G05xgeB3EJ/ceHP/Tlqq/FzRgFnkHr6Fl74Y3bDhg8hO+O/baK2GkXeWcf4Rb6Wbovg2aW78PRw47MRXejXppbZkYQQxeQ0M8W5PJvNaGHnbXHH7IKzx/5bxyvAKNYhdxvXZNduB0GtoZJv4fvOLYolPcvdzd1efGsAxei2ykovoPDn+T0pCqLDjZ9tWQXvKzvNyCsF3SWkZmbzwvLdLNwSwRWNqvLunaFyspsQLkYK+uXISDZa2TG78nSb74HMc/YVFFRvCnVCIOQeo3DXamcU4sudLavD7Y4vjp7eEFjf+CqK1pCeaBT2968A8jkXIzH/M0GFc9l3Kokxc7dxOC6ZsX2aMb5vczxkbnUhXI4UdCj4Gm+t7a1ue1d5brd5/FHOFzCvAKO1HTLc+F6rPdQsRqvb1SkFPoHGV0A941K6iwXUK+9UogS01szdeILpYXvw9/Hkuweu4ppmNcyOJYS4TC5Z0JVSg4BBzZo1K/3O8rvGe9nD8MfrkBKbZ1xZGXcJq90eOg43Wty120FAfbkVaN/n8x/j7/u8eZlEoRLTsnh6yU5W7oymZ4sg3r69IzX8ZPIfIVyZSxZ0rXUYENalS5fRpd7Z6umXXuNty4HEE9BppH2sO7fVLfdpztfljvELU2w/mcCYuVs5lZjOUwNb8WCPJri5VfAPpUIU4tSpU0yYMIFNmzbh5eVFo0aNmDVrFkOHDr3kFqqjRo3i119/5ciRI3h5eXH69Gm6dOnCsWPHHJ7TJQt6mSponDcnC258s3yzuLLyGOMXpWKzaT776whv/LyfWv7eLHi4K50aVDU7lhBOTWvNkCFDGDlyJPPnzwdg+/btxMTEFLiNu7s7X3zxBY88Ur63i5YzXwoa55XxX2EhZ5IzuP/rTbzy4z76ta7Fj+N6SDEX1hO+AN5pB9MCje/hC0q9yzVr1uDp6cnDD/83M3lISAj16xd88vCECRN45513yM7OLvXzl4QU9L7PG+O9ecn4r7CQfw6f4YbZf/L34TO8dEtbPrynEwG+nmbHEqJs5Z4PlXgS0P/d86KURX3Xrl107ty5RNs0aNCA7t278+2335bquUtKutxl/FdYVI5NM3v1Qd77/SCNqlfmi1FX0DY4wOxYQlyen54y5vcoSMQmyMm4cFlWGiwfA1u+zn+b2u1h4GtllzGPp59+mptvvpkbb7zRIfvPjxR0kPFfYTmnEtMZP38bG47GM7RTXV66pR2VveS/u7Cwi4t5UcuLqW3btixatKjE2zVr1oyQkBAWLCh9t39xyf9wISxmzb5YJi3cQXpWDm8N68itneV8EGEBRbWk32lXwHwY9eG+lZf9tH369OHpp5/m008/ZfRo48KqTZs2kZqaWuS2zzzzTLm20GUMXQiLyMy2MWPlHu77ahO1/L0JG9tdirmoOBx0PpRSiqVLl/Lrr7/StGlT2rZty7Rp0wgODr7kFqoLFy68YNu2bdvSqVOnUj1/SUgLXQgLOHEmlbHztrIjIpERXRvy9A2t8fZ04C1yhXA2DjwfKjg4ON+u86ysS+9nMWzYsAt+X7JkSamfv7ikoAvh4laERzF18U6Ugo/u6cSAdnXMjiSEOSr4+VAuWdDLdOpXIVxUelYOL4btYd7GE4Q2CGT2naHUr2bxewgIIQrkkmPoWuswrfWDAQFyCY6omA7GnOOW99czb+MJHu7VlAUPdZViLkQF55ItdCEqKq01CzdH8PwPu6hcyYOv77+SXi2CzI4lhHACUtCFcBHJGdk8s3Qny7dHcU3T6sy6I4Sa/t5mxxJCOAkp6KLCWLYtkpmr9hOVkEZwoA9T+rdkcGhds2MVy67IRMbM3cqJ+FQmXdeCR69thrvcIU0IkYdLjqELUVLLtkUydclOIhPS0EBkQhpTl+xk2bZIs6MVSmvNl+uPMvR/f5ORbWP+g10Z27e5FHMhyom7uzshISG0bduWjh078vbbb2Oz2QD4448/uOmmmy5Yf9SoUednluvduzctW7YkJCSEkJCQ88tz99muXTsGDRpEQkJCmWSVFrqwvLTMHF5euYe0rJwLl2fl8NyyXcSdy8Dfx4Mq3p74e3vm+dn4XsmjfD73XtyD8Ni1TVmzP45f98TQr3VNZt7WkaqVK5VLFiGEwcfHh+3btwMQGxvLXXfdRWJiIi+++GKxtv/uu+/o0qVLgfscOXIkH3zwAc8880yps0pBF5Zis2mOnE5h+8kEtp04y/aTCew7dY4cm853/XMZ2cz4cW+h+/T2dMPf25Mq3h74+3gW8rPHRR8IjJ99PN1RqvAWdW4PQu6HjsiENJ5Zugul4Pmb2nBft0ZF7kOIim7lkZW8u/VdTqWconbl2ozvNJ4bm5Td1Ks1a9bkk08+4YorrmDatGllss+uXbsSHh5eJvuSgi5cWnxKJttPnmX7iQS2nUxgx8kEktKNexD7eXnQsX4Aj/RqytyNJ4hPybxk++BAb1ZN6ElSejbn0rNISssmKS2Lcxl5f7Z/T88mKT2LhNRMTsankmRfPzPHVmhGdzd1vrXv7+Px34cAb0/8fYyfv1x/9JIeBA3U8PPi/u6Ny+z1EsKqVh5ZybS/p5Gekw5AdEo00/6eBlCmRb1JkybYbDZiY2MB+PPPPwkJCTn/+IkTJy7ohr/77rvx8TGmpF29ejXVq1c//1hOTg6rV6/mgQceKJNsUtCFy8jMtrEnOont9pb3tpMJHD9j3CDBTUHL2v7c2CGY0PqBhDYIpGmQH272seZmNf0uaAED+Hi680T/VlTx9qSKtyfgk9/TFik9K4ekdHvBz1P4k9LsHxIu+Nn4fux06vltkjOyC9z36XOlu1OUEFbx+sbX2Re/r8DHw+PCybRd+KE9PSed59c/z6ID+d8trVW1Vjx55ZMlzqL1fz1+PXr0YMWKFed/HzVq1AXr5tflnpaWRkhICMeOHaNz585cd911Jc6QHynowilprYk4m8a2PF3nu6OSyMw2WsM1q3gR2iCQO69oQGiDQNrXDSj09qC5Z7M74ix3b093vD3dqVnl8rbPsWm6v/470YnplzwWHHh5HzKEqGguLuZFLb9cR44cwd3dnZo1a7J3b+HDdQXJHUNPTEzkpptu4oMPPmDcuHGlziYFXTiFc+lZhEckni/e208mcDrZ+I/o7elG+7oBjOzakNAGVQmpH0idAO8SjykPDq3rlJepubspnhzQKt8ehCn9W5qYTAjnUVRL+vpF1xOdEn3J8jqV6/DlgC/LJENcXBwPP/wwY8aMKZNzWgICApg9eza33HILjzzyCJ6enqXanxR0Ue5ybJoDMefYdiKB7SfPsu1EAofiksntxWoSVJmeLYIIbVCV0PqBtKxdBU93a19h6cgeBCEqgvGdxl8whg7g7e7N+E7jS7Xf3O7xrKwsPDw8uPfee5k4cWJp454XGhpKx44dmT9/Pvfee2+p9qXyjgW4ijw3Zxl98OBBs+MICp+0JSYp3V68je7znZGJpGYaLdFAX09C6wcSUr8qIQ0CCakXSIBv6T6lCiGsYe/evbRu3brY6zv6LPfylt/fr5TaorXukt/6LlnQc3Xp0kVv3rzZ7BgV3sWXXAF4uCnaBlch7lwmUfaxYU93RZs6/oTUDySkQSCh9avSsLqvXI4lhMhXSQu61ZS0oEuXuyg2m01zJiWT6MQ0ohPTiU5IIzopnW/+Pn7JJVfZNs2uqHMMbFeb++sHEtqgKm2D/fH2dDcpvRBCWJsUdAEYZ5WfSckkOiH9v4KdmPfnNGISMy655rqSu1uB12HbbJr37+pUHvGFEKLCk4LuIkpzYxGtNfEpmZcW6YT/CvepxPRLCrOnu6J2gDd1/H3o1KAqtQO8CQ7wueB79cqV6PHGGiIT0i55XrnkSgghyo8UdBeQ37SgU5fsBOCWkGDOpmYZRbrA1nX6+eu3c3m6K2r5e1MnwNu4DKyd8XPtAB+CA72pE+BD9cqVzk/MUpgp/VvKJVdCCGEyKeguYOaq/fneWGTSwh08uTicjIuKtYfbf8W6Q71A+rc1fja+fKgT6E2Nyl7FKtbFIZdcCSGE+aSgO7nE1Kx8u7PBuJ77ge6Nqe3vTXCgvXUd4E11P69yv72ms07aIoQQpeHu7k779u3P/75s2TIaNWrExo0bmTx5MjExMSil6N69O7NnzyYjI4P777+fw4cP4+3tzRdffEG7du3KJasUdCcVlZDG538dZd7GEwWuUzfQh6dvqLiXdAghhKPlvdVprpiYGIYNG8b8+fPp2rUrWmsWL17MuXPnePPNNwkJCWHp0qXs27ePxx57jNWrV5dLVmtPv+WCDsacY9KCHfR8Yw1f/X2M69vUYkr/lvhcdLmXjFELIcSFEsPCONinL3tbt+Fgn74khoU55Hk++OADRo4cSdeuXQFQSnHbbbdRq1Yt9uzZQ9++fQFo1aoVx44dIyYmxiE5LiYtdCex+Vg8H609zG97Y/HxdOeeqxvyfz0aU6+qL2C0xmWMWggh8pcYFkb0c8+j042JrLKjooh+7nkAAgYNuuz95k79CtC4cWOWLl3Krl27GDlyZL7rd+zYkSVLltC9e3c2btzI8ePHiYiIoFatWpedobikoJvIZtOs3hfLR2sPs+X4War6ejKhX3NGdm1E1cqVLlhXxqiFEBXZqVdeIWNvwbdPTduxA5154Z3VdHo60c88S8KChflu49W6FbWffrrQ582vy70wTz31FOPHjyckJIT27dsTGhqKh0f5lFop6CbIzLaxfHskn6w7wsHYZOoG+jBtUBtuv6I+vpXkn0QIIUrq4mJe1PLSaNu2LVu2bOGWW2655DF/f3++/NK4u5vWmsaNG9O4ceMyz5AfqR7lKDkjm/kbT/D5X0eJTkynVe0qzLojhBs71LH83cSEEKI0impJH+zTl+yoqEuWewQH0/Dbb8o0y5gxY7jyyiu58cYbueqqqwCYM2cO/fr1w9vbG19fXypVqsRnn31Gz5498ff3L9PnL4hLFvQ8d1szO0qxnE7O4Kv1x/jmn2MkpWdzdZNqvDq0Pb1aBMmNSYQQogzUfHzCBWPoAMrbm5qPTyjz56pVqxbz589n8uTJxMbG4ubmRs+ePRk6dCg7duxgxIgRuLu706ZNGz7//PMyf/6CyN3WHOj4mRQ+WXeERVsiyMyx0b9NbR7q1YTQBlXNjiaEEE6vpHdbSwwLI/adWWRHR+NRpw41H59QqhPizCZ3W3MCuyIT+XDtYX7aGY2HmxtDO9VldM8mNA3yMzuaEEJYVsCgQS5dwEtLCnoZ0Vqz/tAZPlp7mL8OnaaKlwejezbh/m6NqeXvbXY8IYQQFicFvZRybJqfdkXz0drD7IpMIqiKF08NbMVdVzXA39vT7HhCCCEqCCnolyk9K4eFWyL4dN0RTsSn0qRGZV4b2p4hneri5eFe9A6EEEKIMiQFvYQSU7P49t9jfPX3MU4nZ9KxfiBP39CK69rULvcbogghhBC5pKAXU3RiGp//adwsJSUzh14tgni4V1OublJNLj0TQghhOinoRTgYc46P1x1h+fZIbBpu6lCHh3o2pU1w+UwUIIQQwlwzZsxg7ty5uLu74+bmRtWqVTl79izJycnExcWdnwnuf//7H08//TRHjhzh+PHj5xt7gwcP5rfffiM5OZnGjRvz888/07LlfzfXmjBhAsHBwTzxxBOlyikFHVi2LfKSG5/Uq+pz/mYp3p5u3HVlA/6vRxPqV/M1O64QQohy8s8//7BixQq2bt2Kl5cXp0+fJjMzk+DgYP744w/efPNNVqxYccE2gYGBrF+/nu7du5OQkEB0dPT5x+68807mz5/PCy+8AIDNZmPRokWsX7++1FkrfEFfti2SqUt2kpaVA0BkQhoTF2zHpiHQ15PxfZszomtDqvt5mZxUCCFEYQ5sOMU/yw+THJ+BXzUvut7SlBZX1S7VPqOjo6lRowZeXkYNqFGjRpHb5Bbt7t27s2TJEoYOHcru3bsBGD58OHfcccf5gr5u3ToaNWpEw4YNS5UT5H7ozFy1/3wxz2XTEODjwd9P9eHx61pIMRdCCCd3YMMp1ny3j+T4DACS4zNY890+Dmw4Var9Xn/99Zw8eZIWLVrw6KOPsnbt2iK36du3L+vWrSMnJ4f58+dzxx13nH+sQ4cOuLm5sWPHDgDmz5/P8OHDS5UxV4VvoUclpOW7PCktW+58JoQQTuLPBQc4fTK5wMdjjiaSk33hVObZmTZ+/3Yvu/+69KYtADXq+9Hj9haFPq+fnx9btmzhzz//ZM2aNdxxxx289tprjBo1qsBt3N3d6d69O99//z1paWk0atTogseHDx/O/Pnzadu2LcuXL2f69OmFZiiuCl+xggN9iMynqAcH+piQRgghxOW4uJgXtbwk3N3d6d27N71796Z9+/Z8/fXXhRZ0MLrdhwwZwrRp0y55bPjw4Vx//fX06tWLDh06ULNmzVJnBCnoTOnf8oIxdAAfT3em9G9ZyFZCCCHKU1Et6a+fXn++uz0vv2peDJnU6bKfd//+/bi5udG8eXMAtm/fXqzx7h49ejB16tR8u9ObNm1K9erVeeqpp5gwYcJlZ7tYhR9DHxxal1eHtqduoA8KqBvow6tD2zM4tK7Z0YQQQhRT11ua4lHpwpLmUcmNrrc0LdV+k5OTGTlyJG3atKFDhw7s2bMn31b3xZRSTJ48ucCT6IYPH86+ffsYMmRIqfJd8Jxy+1QhhBDOqKS3T3XEWe5mqhC3T1VKDQIGNWvWzOwoQgghnESLq2q7dAEvLZfsctdah2mtHwwICDA7ihBCCOEUXLKgCyGEEOJCUtCFEEI4LVc+z6s0LufvloIuhBDCKXl7e3PmzJkKV9S11pw5cwZvb+8SbeeSJ8UJIYSwvnr16hEREUFcXJzZUcqdt7c39erVK9E2UtCFEEI4JU9Pz/O3JhVFky53IYQQwgKkoAshhBAWIAVdCCGEsACXnvpVKRUHHC/g4QAgsYSP1QBOl0E0Ryrs73KGfV/OPkqyTXHWLWodOTbM2bccG+Zw5HFRVvt39mPjch9zxLHRUGsdlO8jWmtLfgGflPQxYLPZuUvzdznDvi9nHyXZpjjrFrWOHBtybFSkY8ORx0VFOTZK8Vi5HhtW7nIPu8zHnJ0js5fFvi9nHyXZpjjrFrWOHBvm7FuODXM4OndFODZc4rhw6S73sqaU2qwLuIuNqNjk2BAFkWNDFKS8jw0rt9AvxydmBxBOS44NURA5NkRByvXYkBa6EEIIYQHSQhdCCCEsQAq6EEIIYQFS0IUQQggLkIJeCKVUZaXU10qpT5VSd5udRzgPpVQTpdTnSqlFZmcRzkMpNdj+frFcKXW92XmE81BKtVZKfaSUWqSUesQRz1HhCrpS6gulVKxSatdFywcopfYrpQ4ppZ6yLx4KLNJajwZuLvewolyV5NjQWh/RWj9gTlJRnkp4XCyzv1+MAu4wIa4oRyU8NvZqrR8GbgcccilbhSvowFfAgLwLlFLuwAfAQKANMFwp1QaoB5y0r5ZTjhmFOb6i+MeGqDi+ouTHxbP2x4W1fUUJjg2l1M3AX8BqR4SpcAVda70OiL9o8ZXAIXurKxOYD9wCRGAUdaiAr1VFU8JjQ1QQJTkulOF14Cet9dbyzirKV0nfM7TWP2itrwEcMoQrRcpQl/9a4mAU8rrAEuBWpdSHONH0fqJc5XtsKKWqK6U+AkKVUlPNiSZMVNB7xligH3CbUuphM4IJ0xX0ntFbKTVbKfUx8KMjntjDETt1QSqfZVprnQLcV95hhFMp6Ng4A8gbdsVV0HExG5hd3mGEUyno2PgD+MORTywtdEMEUD/P7/WAKJOyCOcix4bIjxwXoiCmHRtS0A2bgOZKqcZKqUrAncAPJmcSzkGODZEfOS5EQUw7NipcQVdKzQP+AVoqpSKUUg9orbOBMcAqYC+wQGu928ycovzJsSHyI8eFKIizHRtycxYhhBDCAipcC10IIYSwIinoQgghhAVIQRdCCCEsQAq6EEIIYQFS0IUQQggLkIIuhBBCWIAUdCEsRimVo5TarpTaoZTaqpS6poj1A5VSjxZjv38opS7rto9KqR+VUoGXs60QonikoAthPWla6xCtdUdgKvBqEesHAkUW9NLQWt+gtU5w5HMIUdFJQRfC2vyBswBKKT+l1Gp7q32nUir3NrCvAU3trfqZ9nWfsK+zQyn1Wp79DVNKbVRKHVBK9bj4yZRSdZRS6+z72pW7jlLqmFKqhlLqYftj25VSR5VSa+yPX6+U+seebaFSys+RL4oQViQzxQlhMUqpHGAn4A3UAfporbcopTwAX611klKqBvAv0BxoCKzQWrezbz8QeA7op7VOVUpV01rHK6X+ALZorScppW4AJmqt+1303JMAb631DKWUu/35zimljgFdtNan7et5Ar8Db2BMnbkEGKi1TlFKPQl4aa2nO/J1EsJq5PapQlhPmtY6BEAp1RX4RinVDuO2jq8opXoCNoz7NtfKZ/t+wJda61QArXV8nseW2L9vARrls+0m4At7wV6mtd5eQMZ3gd+11mFKqZuANsB6pRRAJYwiL4QoASnoQliY1vofe2s8CLjB/r2z1jrL3mr2zmczBRTUdZdh/55DPu8fWut19g8MNwLfKqVmaq2/uWDnSo3C6BUYk+f5ftVaDy/J3yaEuJCMoQthYUqpVoA7cAYIAGLtxfxajKIKcA6okmezX4D7lVK+9n1UK8HzNbQ/x6fA50Cnix7vDEwG7tFa2+yL/wW6KaWa2dfxVUq1KNlfKoSQFroQ1uOjlNpu/1kBI7XWOUqp74AwpdRmYDuwD0BrfUYptV4ptQv4SWs9RSkVAmxWSmUCPwJPF/O5ewNTlFJZQDIw4qLHxwDVgDX27vXNWuv/s7fa5ymlvOzrPQscKNmfLUTFJifFCSGEEBYgXe5CCCGEBUhBF0IIISxACroQQghhAVLQhRBCCAuQgi6EEEJYgBR0IYQQwgKkoAshhBAWIAVdCCGEsID/BxMU/pccUzOGAAAAAElFTkSuQmCC",
      "text/plain": [
       "<Figure size 576x432 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.figure(figsize=(8,6))\n",
    "\n",
    "for name, speeds in speed_training.items():\n",
    "    plt.plot(speeds.keys(), speeds.values(), label=name, marker='o')\n",
    "\n",
    "plt.title('Performance of Graph Network (for training)')\n",
    "plt.xlabel('Batch size')\n",
    "plt.ylabel('Speed [ms/it]')\n",
    "plt.loglog()\n",
    "plt.legend()\n",
    "plt.show()"
   ]
  }
 ],
 "metadata": {
  "interpreter": {
   "hash": "475250b3cf807ed3cfcdd5b2e8760b9c29416cad54cd9aa950ed2b92e2b64699"
  },
  "kernelspec": {
   "display_name": "Python 3.9.10 ('torchmd-net')",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.9.10"
  },
  "orig_nbformat": 4
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
